 /*******************************************************************************
  * Copyright (c) 2000, 2003 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Common Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/cpl-v10.html
  *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.ui.wizards.datatransfer;

 import java.util.*;
 import org.eclipse.ui.model.AdaptableList;
 import org.eclipse.ui.dialogs.FileSystemElement;

 /**
  * The <code>MinimizedFileSystemElement</code> is a <code>FileSystemElement</code> that knows
  * if it has been populated or not.
  */
 class MinimizedFileSystemElement extends FileSystemElement {
     private boolean populated = false;
 /**
  * Create a <code>MinimizedFileSystemElement</code> with the supplied name and parent.
  * @param name the name of the file element this represents
  * @param parent the containing parent
  * @param isDirectory indicated if this could have children or not
  */
 MinimizedFileSystemElement(String name, FileSystemElement parent, boolean isDirectory) {
     super(name, parent, isDirectory);
 }
 /**
  * Returns a list of the files that are immediate children. Use the supplied provider
  * if it needs to be populated.
  * of this folder.
  */
 public AdaptableList getFiles(IImportStructureProvider provider) {
     if (!populated) {
         populate(provider);
     }
     return super.getFiles();
 }
 /**
  * Returns a list of the folders that are immediate children. Use the supplied provider
  * if it needs to be populated.
  * of this folder.
  */
 public AdaptableList getFolders(IImportStructureProvider provider) {
     if (!populated) {
         populate(provider);
     }
     return super.getFolders();
 }
 /**
  * Return whether or not population has happened for the receiver.
  */
 boolean isPopulated() {
     return this.populated;
 }
 /**
  * Return whether or not population has not happened for the receiver.
  */
 boolean notPopulated() {
     return !this.populated;
 }
 /**
  * Populate the files and folders of the receiver using the suppliec structure provider.
  * @param provider org.eclipse.ui.wizards.datatransfer.IImportStructureProvider
  */
 private void populate(IImportStructureProvider provider) {

     Object fileSystemObject = getFileSystemObject();

     List children = provider.getChildren(fileSystemObject);
     if (children == null) {
         children = new ArrayList(1);
     }
     Iterator childrenEnum = children.iterator();
     while (childrenEnum.hasNext()) {
         Object child = childrenEnum.next();

         String elementLabel = provider.getLabel(child);
         //Create one level below
 MinimizedFileSystemElement result =
             new MinimizedFileSystemElement(elementLabel, this, provider.isFolder(child));
         result.setFileSystemObject(child);
     }
     setPopulated();
 }
 /**
  * Set whether or not population has happened for the receiver to true.
  */
 void setPopulated() {
     this.populated = true;
 }
 }

